/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package facades;

import entities.FacturaMultimarca;
import entities.PedidoFabrica;
import entities.Producto;
import entities.ProductoTalla;
import entities.Talla;
import entities.interfaces.PedidoInterfaz;
import java.math.BigInteger;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author damfercer
 */
@Stateless
public class ProductoTallaFacade extends AbstractFacade<ProductoTalla> {
    @PersistenceContext(unitName = "CorporatePU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public ProductoTallaFacade() {
        super(ProductoTalla.class);
    }
    
    public List<ProductoTalla> getProductosTallaAMostrar(PedidoInterfaz p, String sql){
        StringBuilder sb=new StringBuilder();
        sb.append("SELECT DISTINCT producto_talla.* FROM producto_talla, producto, c, serie_tallaje WHERE producto_talla.PRODUCTO=producto.ID_PRODUCTO AND producto.C=c.ID_C AND producto.SERIE_TALLAJE=serie_tallaje.ID_SERIE_TALLAJE");
        sb.append(" AND producto_talla.ID_PRODUCTO_TALLA NOT IN (SELECT PRODUCTO_TALLA FROM ");
        if(p.getClass().getName().equals("entities.Pedido")){
            sb.append("linea_pedido WHERE linea_pedido.PEDIDO=");       
        }
        else if(p.getClass().getName().equals("entities.PedidoFabrica")){
            sb.append("linea_pedido_fabrica WHERE linea_pedido_fabrica.PEDIDO_FABRICA=");       
        }
        sb.append(p.getId());
        sb.append(")");
        sb.append(sql);
        Query q=em.createNativeQuery(sb.toString(), ProductoTalla.class);
        List<ProductoTalla> productos=q.getResultList();
        return productos;
    }
    
    public ProductoTalla getProductoTallaDeProductoYTalla(Producto p, Talla t){
        ProductoTalla pt=null;
        Query q=em.createNamedQuery("ProductoTalla.findByProductoYTalla");
        q.setParameter("idProducto", p.getIdProducto());
        q.setParameter("idTalla", t.getIdTalla());
        List<ProductoTalla> productosTallas=q.getResultList();
        if(!productosTallas.isEmpty()){
            pt=productosTallas.get(0);
        }
        return pt;
    }
    
    public List<ProductoTalla> getProductosTallasNoFacturados(FacturaMultimarca fm){
        Query q=em.createNamedQuery("ProductoTalla.findProductosTallaRestantesDePedido");
        q.setParameter("idFacturaMultimarca", fm.getIdFacturaMultimarca());
        return q.getResultList();
    }
    
    public List<ProductoTalla> getProductosTallasAddFactura(FacturaMultimarca fm){
        Query q=em.createNamedQuery("ProductoTalla.findProductosTallaNoFactura");
        q.setParameter("idPedido", fm.getPedido().getIdPedido());
        q.setParameter("idFacturaMultimarca", fm.getIdFacturaMultimarca());
        return q.getResultList();
    }
    
    public ProductoTalla getProductoTallaDeCodigoDeBarras(BigInteger codigoBarras){
        ProductoTalla pt=null;
        Query q=em.createNamedQuery("ProductoTalla.findByCodigoBarras");
        q.setParameter("codigoBarras", codigoBarras);
        List<ProductoTalla> productosTalla= q.getResultList();
        if(!productosTalla.isEmpty()){
            pt=productosTalla.get(0);
        }
        return pt;
    }
    
    public List<ProductoTalla> getProductosTallaDiferentesDePedidoFabrica(PedidoFabrica pf){
        Query q=em.createNamedQuery("ProductoTalla.findByPedidoFabrica");
        q.setParameter("idPedidoFabrica", pf.getIdPedidoFabrica());
        return q.getResultList();
    }
    
    public void createAndFlush(ProductoTalla entity) {
        getEntityManager().persist(entity);
        getEntityManager().flush();
    }
    
    
    
}
